fn build_carla_bindings(libcarla_prefix: &str) {
    cxx_build::bridge("src/ffi.rs")
        .file("src/wrapper.cc")
        .flag(format!("-I{}/include", libcarla_prefix).as_str())
        .flag(format!("-I{}/include/system", libcarla_prefix).as_str())
        .flag_if_supported("-std=c++14")
        .compile("carla_bridge");

    println!("cargo:rerun-if-changed=src/ffi.rs");
    println!("cargo:rerun-if-changed=src/wrapper.h");
    println!("cargo:rerun-if-changed=src/wrapper.cc");
}

fn link_carla_libs(libcarla_prefix: &str) {
    println!("cargo:rustc-link-search={}/lib", libcarla_prefix);
    println!("cargo:rustc-link-lib=carla_client");
    println!("cargo:rustc-link-lib=rpc");
    println!("cargo:rustc-link-lib=Recast");
    println!("cargo:rustc-link-lib=Detour");
    println!("cargo:rustc-link-lib=DetourCrowd");
    if cfg!(target_os = "windows") {
        println!("cargo:rustc-link-lib=Shlwapi");
    }
}

fn main() {
    let libcarla_prefix = std::env::var("LIBCARLA_PATH").unwrap();
    build_carla_bindings(libcarla_prefix.as_str());
    link_carla_libs(libcarla_prefix.as_str());
}
